package w83b.w83bOperacionesPaso.w83bComunicaciones;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bComunicacionesBean;
import w83b.w83bBeans.W83bPlantillasBean;
import w83b.w83bUtilidades.W83bUtilidadesRTF;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import w83b.w83bUtilidadesComunes.W83bUtilidades;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

// TODO: Auto-generated Javadoc
/**
 * The Class W83bTablaConveniosOP.java.
 *
 * @author Deusto Sistemas
 */
public class W83bGenerarRtfCarpetaAction extends Q70ActionPasoOP{


	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

		
        List lista = (ArrayList)contexto.get("w83bResultadoBean");
        
//    	String strRutaRtf ="";
		HashMap mapaPar = new HashMap();   
//		strRutaRtf = Q70ListenerUtils.getApplicationProperty("RUTA_PLANTILLAS_RTF")+"plantillaEtiquetasCarpetaCitacion.rtf";	
		mapaPar.put("<<finrep>>","");
		mapaPar.put("<<iniciorep>>","");
		//CharSequence content=W83bUtilidadesRTF.leerTodoFichero(strRutaRtf);
		HashMap mapaPlantillas = (HashMap)contexto.get("w83bPlantillasMap");
		byte[] plantilla = ((W83bPlantillasBean)mapaPlantillas.get(W83bClsConstantes.ETIQUETAS_CARPETAS.toUpperCase())).getFichero();
		
		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(plantilla);
		String contenido=content.toString();
		StringBuffer contenidoBuffer=new StringBuffer(contenido);
		int y=contenidoBuffer.indexOf("<<iniciorep>>");
		int z=contenidoBuffer.indexOf("<<finrep>>");
		String parteDelante=contenido.substring(0,y);
		String parteDetras=contenido.substring(z,contenido.length());
		int inicio=parteDelante.lastIndexOf("}")+1;
		int fin=parteDetras.indexOf("}")+1+z;
		String parteDelanteLimpia=contenido.substring(0,inicio);
		String parteAtrasLimpia=contenido.substring(fin,contenido.length());
		contenidoBuffer=new StringBuffer(contenidoBuffer.substring(y,fin));
		String saltos="\r\n\\par \r\n\\par ";
		int inicioSaltos=contenidoBuffer.lastIndexOf(saltos);
		StringBuffer contenidoBufferCorto=new StringBuffer(contenidoBuffer.toString());
		contenidoBufferCorto.replace(inicioSaltos,inicioSaltos+saltos.length(),"");
		saltos="\r\n\\par ";
		inicioSaltos=contenidoBufferCorto.lastIndexOf(saltos);
		contenidoBufferCorto.replace(inicioSaltos,inicioSaltos+saltos.length(),"");
		StringBuffer datos=new StringBuffer();
		// se aņade la parte delantera del documento.
		datos.append(parteDelanteLimpia);
		StringBuffer elemento=new StringBuffer(W83bClsConstantes.CUARENTA);
		int numElem=1;
		W83bComunicacionesBean bean;
		for(int i=0;lista!=null && i<lista.size()-1;i++)
		     {
	    	 bean=(W83bComunicacionesBean)lista.get(i);
	    	 if(bean!=null)
	    	  	{
	    		 	String razon=W83bUtilidades.convertirAVasioSiNulo(bean.getRazon());
	    		 	String	razonSalto=W83bUtilidadesRTF.meterIntroCarpeta(razon,0,3);
	    	  		int numsaltos=W83bUtilidadesRTF.numIntros(razonSalto);
	    			mapaPar.put("<<RAZON>>",razonSalto);
	    			if ("preaviso".equals(lista.get(lista.size()-1))){
	    				mapaPar.put("<<NENTR>>",bean.getNumpreaviso());
	    	        }else if ("comempresas".equals(lista.get(lista.size()-1))){
	    	        	mapaPar.put("<<NENTR>>",bean.getTerrit()+"/"+bean.getAnoacta()+"/"+W83bUtilidades.rellenarCaracter(bean.getNacta(), "0", 6, true));
	    			}else if ("comincidencias".equals(lista.get(lista.size()-1))){
	    	        	mapaPar.put("<<NENTR>>",bean.getTerrit()+"/"+bean.getAnoincidencia()+"/"+W83bUtilidades.rellenarCaracter(bean.getNumincidencia(), "0", 6, true));
	    			}
	    			
	    			// si es el elemento es el 3 multiple de 3 hay que retocar el contenido
	    			//quitar 7 saltos de linea
	    			
	    			// si es el elemento es el 3 multiple de 3 hay que retocar el contenido
	    			//quitar 7 saltos de linea
	    			
	    			if(numElem%7==0)
	    			{
	    				
	    				elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBufferCorto, mapaPar);
	    				
	    			}else{
	    				elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaPar);
	    			}
	    			
	    			if(numsaltos>0)
	    			{
	    				String s="";
	    				int inicioS=0;
	    				
	    					s="\\par \\par";
	    					inicioS=elemento.indexOf(s);
	    					if(numsaltos==W83bClsConstantes.UNO)
	    					{
	    						elemento.replace(inicioS,inicioS+s.length(),"\\par ");
	    					}else if(numsaltos==W83bClsConstantes.DOS){
	    						elemento.replace(inicioS,inicioS+s.length(),"");
	    					}
	    				
	    			}
	    			
	    			datos.append(elemento);
	    			numElem++;
	    	  	}
	    	   		
		    	 
		      }
	
		
			
		//para cerrar el contenido del documento metemos la parte trasera.
		datos.append(parteAtrasLimpia);
		
        response.setContentType("application/msword");
        response.setContentLength(datos.toString().getBytes().length);
        if ("preaviso".equals(lista.get(lista.size()-1))){
        	response.setHeader("Content-disposition","attachment;filename=EtiquetasCarpetaPreavisos.rtf");
        }else if ("comempresas".equals(lista.get(lista.size()-1))){
        	response.setHeader("Content-disposition","attachment;filename=EtiqCarpetaComEmpresas.rtf");
		}else if ("comincidencias".equals(lista.get(lista.size()-1))){
        	response.setHeader("Content-disposition","attachment;filename=EtiqCarpetaComIncidencias.rtf");
		}
        response.getOutputStream().write(datos.toString().getBytes());
        response.getOutputStream().flush();

		
		return null;
	}
	

}
